<template>
  <view class="conversation-summary-component">
    <ai-chat ref="aiChat" @ai-message="handleAIMessage"
      @messages-updated="handleMessagesUpdated" @loading="handleLoading" @error="handleSSEError"></ai-chat>
  </view>
</template>

<script>
import modelManager from '@/store/model.js'

export default {
  name: 'conversation-summary',
  props: {
    messages: {
      type: Array,
      default: () => []
    },
    modelId: {
      type: String,
      default: ''
    }
  },
  data() {
    return {
      isLoading: false,
      isMounted: false,
      summaryTimeout: null,
      summaryContent: ''
    }
  },
  mounted() {
    // 标记组件已挂载
    this.isMounted = true;
    console.log('[总结组件] 组件已挂载');
  },
  methods: {
    // 生成总结
    generateSummary() {
      if (!this.messages || this.messages.length === 0) {
        console.error('[总结组件] 没有要总结的消息');
        this.$emit('error', { type: 'COMPONENT_ERROR', message: '没有要总结的消息' });
        return;
      }

      if (this.isLoading) {
        console.warn('[总结组件] 已经在生成总结中');
        return;
      }

      // 设置加载状态
      this.isLoading = true;
      this.$emit('loading', true);

      // 重置总结内容
      this.summaryContent = '';

      // 构建提示词
      const conversations = this.messages
        .filter(msg => msg.role === 'user' || msg.role === 'assistant')
        .map(msg => {
          const role = msg.role === 'user' ? '用户' : 'AI';
          return `${role}: ${msg.content}`;
        })
        .join('\n\n');

      const prompt = `以下是一段对话内容，请你对这段对话进行总结，总结要点包括：
1. 对话的主要话题和内容
2. 用户提出的关键问题
3. AI给出的主要建议或解决方案
4. 对话中涉及的重要信息或结论

总结要求：
1. 长度控制在200字以内
2. 要抓住对话的核心内容和重点
3. 使用简洁、客观的语言
4. 按照要点分条列出，每条前加"•"符号

对话内容：
${conversations}`;

      // 调用AI聊天组件生成总结
      if (this.$refs.aiChat) {
        // 设置超时处理
        if (this.summaryTimeout) {
          clearTimeout(this.summaryTimeout);
        }

        this.summaryTimeout = setTimeout(() => {
          if (this.isLoading) {
            console.error('[总结组件] 生成总结超时');
            this.isLoading = false;
            this.$emit('loading', false);
            this.$emit('error', { type: 'COMPONENT_ERROR', message: '生成总结超时' });

            // 尝试重置aiChat组件
            if (typeof this.$refs.aiChat.reset === 'function') {
              this.$refs.aiChat.reset();
            }
          }
        }, 60000); // 60秒超时

        // 构建系统提示
        const systemPrompt = `你是一个专业的对话总结专家，擅长将长对话内容提炼为简洁明了的要点。
请对用户提供的对话进行总结，包括：主要话题、关键问题、重要建议和结论。
总结应简洁（200字以内）、客观，并使用要点形式呈现。
每个要点前加"•"符号。`;

        // 创建包含系统提示的消息历史
        const messages = [
          { role: 'system', content: systemPrompt }
        ];
        
        // 使用 ai-chat 组件发送消息
        this.$refs.aiChat.sendMessage(prompt, messages, this.modelId || modelManager.currentModel);
      } else {
        console.error('[总结组件] AI聊天组件引用不可用');
        this.$emit('error', { type: 'COMPONENT_ERROR', message: 'AI聊天组件未就绪' });
        this.isLoading = false;
        this.$emit('loading', false);
      }
    },

    // 处理AI消息流式更新
    handleAIMessage(delta) {
      // 将消息类型修改为 summary
      const summaryDelta = {
        ...delta,
        type: 'summary'  // 添加type字段，标记为summary类型
      };

      // 发送给父组件
      this.$emit('ai-message', summaryDelta);
    },

    // 处理消息更新
    handleMessagesUpdated(messages) {
      if (messages.length > 0) {
        const lastMessage = messages[messages.length - 1];
        if (lastMessage.role === 'assistant' && lastMessage.content) {
          // 清除超时定时器
          if (this.summaryTimeout) {
            clearTimeout(this.summaryTimeout);
            this.summaryTimeout = null;
          }

          // 重置加载状态
          this.isLoading = false;

          // 转换为 summary 类型
          const summaryMessage = {
            ...lastMessage,
            type: 'summary'
          };

          // 发送给父组件
          this.$emit('messages-updated', [summaryMessage]);
        }
      }
    },

    // 处理加载状态变化
    handleLoading(loading) {
      this.isLoading = loading;
      this.$emit('loading', loading);

      // 如果加载结束，清除超时定时器
      if (!loading && this.summaryTimeout) {
        clearTimeout(this.summaryTimeout);
        this.summaryTimeout = null;
      }
    },

    // 处理SSE错误
    handleSSEError(err) {
      console.log('[总结组件] SSE错误:', err);

      // 清除超时定时器
      if (this.summaryTimeout) {
        clearTimeout(this.summaryTimeout);
        this.summaryTimeout = null;
      }

      // 重置加载状态
      this.isLoading = false;

      this.$emit('error', err);
    },

    // 重置组件状态
    reset() {
      console.log('[总结组件] 重置组件状态');

      // 清除超时定时器
      if (this.summaryTimeout) {
        clearTimeout(this.summaryTimeout);
        this.summaryTimeout = null;
      }

      this.isLoading = false;

      // 如果aiChat组件存在，尝试重置它
      if (this.$refs.aiChat) {
        // 如果aiChat组件有reset方法，调用它
        if (typeof this.$refs.aiChat.reset === 'function') {
          this.$refs.aiChat.reset();
        }
      }
    }
  }
}
</script>

<style>
.conversation-summary-component {
  width: 0;
  height: 0;
  overflow: hidden;
  position: absolute;
}
</style>